package daohibernate;


import hibernate.HibernateUtil;

import java.util.List;




import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import entities.Empleado;


public class EmpleadoDAO {
	private static EmpleadoDAO instancia = null;	
	private static SessionFactory sf = null;	
	
	
	public static EmpleadoDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new EmpleadoDAO();
		} 
		return instancia;
	}

	public void altaEmpleado(Empleado c){
		Session s = sf.openSession();
		s.beginTransaction();
		System.out.println("Antes de persistir Empleado en la BD.");
		s.persist(c);
		s.flush();
		s.getTransaction().commit();
		s.close();
	}
	
	public void bajaEmpleado(Empleado c){
		System.out.println( "DAO BAJA");
		Session s = sf.openSession();
		Transaction tx = s.beginTransaction();
		System.out.println( "antes de s.delete(c) ");
		s.delete(c);
		System.out.println( "antes de tx.commit() ");
		tx.commit();
		s.close();	
	}
	
	public Empleado buscarEmpleado(String legajo){
		Session s = sf.openSession();
		@SuppressWarnings("unchecked")
		List<Empleado> empleados = s.createQuery("from Empleado where legajo = '" + legajo + "'").list();
		s.close();
		for(Empleado c : empleados){
			return c;
		}
		return null;
	}
	
	
	public void modificarEmpleado(Empleado c){
		Session s = sf.openSession();
		s.beginTransaction();
						
		s.update(c);
		System.out.println("En el dato de modif empleado");
		System.out.println(c.getNroDocumento());
		s.flush();
		s.getTransaction().commit();
	}
	
	public void grabarEmpleados(List<Empleado> lista){
		Session s = sf.openSession();
		s.beginTransaction();
		for(Empleado elemento:lista){
			s.persist(elemento);
		}
		s.flush();
		s.getTransaction().commit();
	}

	
	public boolean verificarEmpleado(String legajo){
		
		Session s = sf.openSession();

		Query q = s.createQuery("from Empleado where legajo = '" + legajo + "'");
		q.setFirstResult(0);
		q.setMaxResults(1);

		if((Empleado)q.uniqueResult() != null){
			return true;
		}else{
			return false;
		}
	}
	
	
	

}

